개요
가중치 평균(Weighted Average)은 단순 평균(Arithmetic Mean)과 달리 각 신뢰도를 반영하기 위해 가중치(Weight)를 부여하여 계산하는 평균 방식입니다. 특히 데이터과학과 모델 평가 분야에서 다양한 지표를 종합하거나, 클래스 불균형이 있는 분류 문제에서 성능을 평가할 때 널리 사용됩니다.
단순 평균은 모든 데이터 포인트를 동등하게 취급하지만, 가중치 평균은 특정 요소가 더 큰 영향을 미치도록 조정할 수 있어, 현실 세계의 복잡한 데이터 구조를 더 정확하게 반영할 수 있습니다.
가중치 평균의 수학적 정의
가중치 평균은 다음과 같은 수식으로 정의됩니다:
$$
\bar{x}_w = \frac{\sum_{i=1}^{n} w_i x_i}{\sum_{i=1}^{n} w_i}
$$
여기서:
- $ x_i $: $ i $번째 데이터 값
- $ w_i $: $ i $번째 데이터에 부여된 가중치 (단, $ w_i \geq 0 $)
- $ \bar{x}_w $: 가중치 평균
예시
예를 들어, 세 개의 정밀도(Precision) 값이 각각 0.9, 0.7, 0.5이고, 각각의 샘플 수(가중치)가 100, 200, 300이라고 가정합시다. 이 경우 가중치 평균 정밀도는:
$$
\bar{p} = \frac{(0.9 \times 100) + (0.7 \times 200) + (0.5 \times 300)}{100 + 200 + 300} = \frac{90 + 140 + 150}{600} = \frac{380}{600} \approx 0.633
$$
이 값은 단순 평균 $ (0.9 + 0.7 + 0.5)/3 = 0.7 $ 과는 다르며, 더 많은 샘플을 가진 클래스의 성능에 더 큰 영향을 받습니다.
모델 평가에서의 가중치 평균 활용
분류 모델의 성능을 평가할 때, 특히 다중 클래스 분류(Multi-class Classification) 문제에서 각 클래스의 샘플 수가 불균형한 경우, 단순 평균은 왜곡된 결과를 초래할 수 있습니다. 이때 가중치 평균을 사용하여 각 클래스의 성능 지표를 샘플 수에 비례하여 통합합니다.
주요 평가 지표에서의 활용
1. 가중치 평균 정밀도 (Weighted Precision)
각 클래스의 정밀도를 해당 클래스의 샘플 수로 가중 평균합니다.
$$
\text{Precision}_{\text{weighted}} = \sum_{c=1}^{C} \left( \frac{N_c}{N} \times \text{Precision}_c \right)
$$
- $ N_c $: 클래스 $ c $의 샘플 수
- $ N $: 전체 샘플 수
- $ C $: 클래스 수
2. 가중치 평균 재현율 (Weighted Recall)
재현율도 동일한 방식으로 가중 평균을 적용할 수 있습니다.
$$
\text{Recall}_{\text{weighted}} = \sum_{c=1}^{C} \left( \frac{N_c}{N} \times \text{Recall}_c \right)
$$
3. 가중치 평균 F1 점수 (Weighted F1-Score)
F1 점수는 정밀도와 재현율의 조화 평균이지만, 클래스별 F1 점수를 가중 평균할 수도 있습니다. 이 경우 각 클래스의 F1 점수에 샘플 수를 가중치로 사용합니다.
from sklearn.metrics import f1_score
# 예시: 실제 라벨과 예측 라벨
y_true = [0, 1, 2, 2, 1, 0]
y_pred = [0, 1, 1, 2, 1, 0]
# 가중치 평균 F1 점수 계산
f1_weighted = f1_score(y_true, y_pred, average='weighted')
print(f"가중치 평균 F1 점수: {f1_weighted:.3f}")
가중치 평균 vs. 다른 평균 방식
| 방식 |
설명 |
사용 사례 |
| 마이크로 평균(Micro) |
모든 클래스의 지표를 샘플 단위로 통합하여 계산 |
클래스 불균형이 심할 때, 전체 예측 정확도를 중시할 때 |
| 마크로 평균(Macro) |
각 클래스의 지표를 동등하게 평균 |
모든 클래스가 동일한 중요도를 가질 때 |
| 가중치 평균(Weighted) |
각 클래스의 지표를 샘플 수에 따라 가중 평균 |
클래스 불균형이 존재하지만, 전체 분포를 반영하고 싶을 때 |
🔍 참고: scikit-learn의 [classification_report](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%EB%8F%84%EA%B5%AC/classification_report) 함수는 기본적으로 macro avg, weighted avg를 모두 출력하여 비교를 용이하게 합니다.
장점과 한계
✅ 장점
- 현실 반영력 향상: 각 클래스의 샘플 수를 반영하여 더 현실적인 성능 평가 가능.
- 불균형 데이터에 강함: 드문 클래스보다 빈번한 클래스의 성능에 더 큰 비중을 두므로, 실제 운영 환경에서의 성능을 더 잘 예측함.
- 해석 용이성: 전체 데이터 분포를 반영한 단일 지표 제공.
❌ 한계
- 다수 클래스 편향: 매우 큰 클래스가 평균을 지배할 수 있어 소수 클래스의 성능 저하를 간과할 수 있음.
- 가중치 선택의 주관성: 가중치가 항상 샘플 수일 필요는 없으며, 도메인 지식에 따라 달라질 수 있음.
관련 문서 및 참고 자료
📘 Tip: 클래스 불균형이 심한 문제에서는 가중치 평균 외에도 샘플 재조정(Resampling), 비용 민감 학습(Cost-sensitive Learning), 또는 ROC-AUC와 같은 지표를 병행 사용하는 것이 좋습니다.
가중치 평균은 데이터과학에서 정량적 평가를 보다 정교하게 수행할 수 있도록 해주는 핵심 기법 중 하나입니다. 특히 모델의 실용적 성능을 평가할 때, 단순 통계보다 현실에 가까운 인사이트를 제공하므로, 분석가라면 반드시 이해하고 활용할 수 있어야 합니다.
# 가중치 평균
## 개요
**가중치 평균**(Weighted Average)은 단순 평균(Arithmetic Mean)과 달리 각 신뢰도를 반영하기 위해 **가중치**(Weight)를 부여하여 계산하는 평균 방식입니다. 특히 **데이터과학**과 **모델 평가** 분야에서 다양한 지표를 종합하거나, 클래스 불균형이 있는 분류 문제에서 성능을 평가할 때 널리 사용됩니다.
단순 평균은 모든 데이터 포인트를 동등하게 취급하지만, 가중치 평균은 특정 요소가 더 큰 영향을 미치도록 조정할 수 있어, 현실 세계의 복잡한 데이터 구조를 더 정확하게 반영할 수 있습니다.
---
## 가중치 평균의 수학적 정의
가중치 평균은 다음과 같은 수식으로 정의됩니다:
$$
\bar{x}_w = \frac{\sum_{i=1}^{n} w_i x_i}{\sum_{i=1}^{n} w_i}
$$
여기서:
- $ x_i $: $ i $번째 데이터 값
- $ w_i $: $ i $번째 데이터에 부여된 가중치 (단, $ w_i \geq 0 $)
- $ \bar{x}_w $: 가중치 평균
### 예시
예를 들어, 세 개의 정밀도(Precision) 값이 각각 0.9, 0.7, 0.5이고, 각각의 샘플 수(가중치)가 100, 200, 300이라고 가정합시다. 이 경우 가중치 평균 정밀도는:
$$
\bar{p} = \frac{(0.9 \times 100) + (0.7 \times 200) + (0.5 \times 300)}{100 + 200 + 300} = \frac{90 + 140 + 150}{600} = \frac{380}{600} \approx 0.633
$$
이 값은 단순 평균 $ (0.9 + 0.7 + 0.5)/3 = 0.7 $ 과는 다르며, 더 많은 샘플을 가진 클래스의 성능에 더 큰 영향을 받습니다.
---
## 모델 평가에서의 가중치 평균 활용
분류 모델의 성능을 평가할 때, 특히 **다중 클래스 분류**(Multi-class Classification) 문제에서 각 클래스의 샘플 수가 불균형한 경우, 단순 평균은 왜곡된 결과를 초래할 수 있습니다. 이때 **가중치 평균**을 사용하여 각 클래스의 성능 지표를 샘플 수에 비례하여 통합합니다.
### 주요 평가 지표에서의 활용
#### 1. 가중치 평균 정밀도 (Weighted Precision)
각 클래스의 정밀도를 해당 클래스의 샘플 수로 가중 평균합니다.
$$
\text{Precision}_{\text{weighted}} = \sum_{c=1}^{C} \left( \frac{N_c}{N} \times \text{Precision}_c \right)
$$
- $ N_c $: 클래스 $ c $의 샘플 수
- $ N $: 전체 샘플 수
- $ C $: 클래스 수
#### 2. 가중치 평균 재현율 (Weighted Recall)
재현율도 동일한 방식으로 가중 평균을 적용할 수 있습니다.
$$
\text{Recall}_{\text{weighted}} = \sum_{c=1}^{C} \left( \frac{N_c}{N} \times \text{Recall}_c \right)
$$
#### 3. 가중치 평균 F1 점수 (Weighted F1-Score)
F1 점수는 정밀도와 재현율의 조화 평균이지만, 클래스별 F1 점수를 가중 평균할 수도 있습니다. 이 경우 각 클래스의 F1 점수에 샘플 수를 가중치로 사용합니다.
```python
from sklearn.metrics import f1_score
# 예시: 실제 라벨과 예측 라벨
y_true = [0, 1, 2, 2, 1, 0]
y_pred = [0, 1, 1, 2, 1, 0]
# 가중치 평균 F1 점수 계산
f1_weighted = f1_score(y_true, y_pred, average='weighted')
print(f"가중치 평균 F1 점수: {f1_weighted:.3f}")
```
---
## 가중치 평균 vs. 다른 평균 방식
| 방식 | 설명 | 사용 사례 |
|------|------|----------|
| **마이크로 평균**(Micro) | 모든 클래스의 지표를 샘플 단위로 통합하여 계산 | 클래스 불균형이 심할 때, 전체 예측 정확도를 중시할 때 |
| **마크로 평균**(Macro) | 각 클래스의 지표를 동등하게 평균 | 모든 클래스가 동일한 중요도를 가질 때 |
| **가중치 평균**(Weighted) | 각 클래스의 지표를 샘플 수에 따라 가중 평균 | 클래스 불균형이 존재하지만, 전체 분포를 반영하고 싶을 때 |
> 🔍 **참고**: `scikit-learn`의 `classification_report` 함수는 기본적으로 `macro avg`, `weighted avg`를 모두 출력하여 비교를 용이하게 합니다.
---
## 장점과 한계
### ✅ 장점
- **현실 반영력 향상**: 각 클래스의 샘플 수를 반영하여 더 현실적인 성능 평가 가능.
- **불균형 데이터에 강함**: 드문 클래스보다 빈번한 클래스의 성능에 더 큰 비중을 두므로, 실제 운영 환경에서의 성능을 더 잘 예측함.
- **해석 용이성**: 전체 데이터 분포를 반영한 단일 지표 제공.
### ❌ 한계
- **다수 클래스 편향**: 매우 큰 클래스가 평균을 지배할 수 있어 소수 클래스의 성능 저하를 간과할 수 있음.
- **가중치 선택의 주관성**: 가중치가 항상 샘플 수일 필요는 없으며, 도메인 지식에 따라 달라질 수 있음.
---
## 관련 문서 및 참고 자료
- [scikit-learn: Model Evaluation](https://scikit-learn.org/stable/modules/model_evaluation.html)
- [F1 Score - Wikipedia](https://en.wikipedia.org/wiki/F1_score)
- [Imbalanced Classification in Machine Learning](https://machinelearningmastery.com/tour-of-evaluation-metrics-for-imbalanced-classification/)
> 📘 **Tip**: 클래스 불균형이 심한 문제에서는 가중치 평균 외에도 **샘플 재조정**(Resampling), **비용 민감 학습**(Cost-sensitive Learning), 또는 **ROC-AUC**와 같은 지표를 병행 사용하는 것이 좋습니다.
---
가중치 평균은 데이터과학에서 정량적 평가를 보다 정교하게 수행할 수 있도록 해주는 핵심 기법 중 하나입니다. 특히 모델의 실용적 성능을 평가할 때, 단순 통계보다 현실에 가까운 인사이트를 제공하므로, 분석가라면 반드시 이해하고 활용할 수 있어야 합니다.